//
// Created by 薛瑄(XueXuan)-顺丰科技技术集团 on 2022/6/27.
//

#include <signal.h>
#include "stdlib.h"
#include <stdio.h>
#include <unistd.h>

/**
 * 自定义 信号处理函数
 * @param sig
 */
void handler(int sig) {

    printf("get a sig,num is %d\n", sig);
    alarm(1);
}


void print_sig(sigset_t *sigset) {

    for (int i = 1; i < 32; ++i) {

        if (sigismember(sigset, i)) {

            printf("1");
        } else {
            printf("0");
        }

    }

    printf("\n");
    fflush(stdout);
}

/**
 * 测试信号量的掩码，pending
 */
void testSignal1() {

    signal(2, handler);
    sigset_t source, pending, old;

    sigemptyset(&source);
    sigemptyset(&pending);
    sigemptyset(&old);

    sigaddset(&source, SIGINT);
//    print_sig(&source);

    sigprocmask(SIG_SETMASK, &source, &old);

    int count = 0;

    while (1) {
        sigemptyset(&pending);
        print_sig(&pending);

        sigpending(&pending);
        print_sig(&pending);
        sleep(1);
        count++;
        if (count > 10) {
            sigprocmask(SIG_SETMASK,&old,NULL);
            printf("recover block\n");
        }


    }


}

